/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.seguridad.controlador;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.abstracts.ControladorAbstract;
import sv.com.intesal.seguridad.bean.Menu;
import sv.com.intesal.seguridad.bean.TipoMenu;
import sv.com.intesal.seguridad.sql.SQLMenu;

/**
 *
 * @author ejerez
 */
public class MenuControlador extends ControladorAbstract {

    public void insert(Menu m) throws Exception {
        try {
            this.insert(m);
            this.updateOrdenMenu(m);
            this.updateOrdenarMenu_x_Nivel();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    private void insertMenu(Menu m) throws Exception {
        try {
            super.setPreparedStatement(SQLMenu.insert);
            super.ps.setInt(1, m.getCodigo_tm());
            super.ps.setString(2, m.getNombre_m());
            super.ps.setString(3, m.getDescripcion_m());
            super.ps.setInt(4, m.getNivel_m());
            super.ps.setInt(5, m.getOrdenar_m());
            super.ps.setString(6, m.getUrl_m());
            super.ps.setString(7, super.v.getEstado(m.getEstado_filtro_m()));
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void update(Menu m) throws Exception {
        try {/*METODO EN DUDA*/
            this.updateMenu(m);//update menu
            this.updateOrdenMenu(m);
            this.updateOrdenarMenu_x_Nivel();//
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    private void updateMenu(Menu m) throws Exception {
        try {
            super.setPreparedStatement(SQLMenu.update);
            super.ps.setInt(1, m.getCodigo_tm());
            super.ps.setString(2, m.getNombre_m());
            super.ps.setString(3, m.getDescripcion_m());
            super.ps.setInt(4, m.getNivel_m());
            super.ps.setInt(5, m.getOrdenar_m());
            super.ps.setString(6, m.getUrl_m());
            super.ps.setString(7, super.v.getEstado(m.getEstado_filtro_m()));
            super.ps.setInt(8, m.getCodigo_m());
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private void updateOrdenMenu(Menu m) throws Exception {
        try {
            super.setPreparedStatement(SQLMenu.updateOrdenarMenuAll).executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private void updateOrdenarMenu_x_Nivel() throws Exception {
        try {
            for (int i = 2; i < 10; i++) {
                super.setPreparedStatement(SQLMenu.updateOrdenarMenu_x_Nivel);
                super.ps.setInt(1, i);
                super.ps.executeUpdate();
            }
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<Menu> getMenus() throws Exception {
        List<Menu> lista = new ArrayList<Menu>();
        try {
            this.getExecuteQuery(SQLMenu.getMenus);
            while (super.rs.next()) {
                lista.add(this.getMenu(super.rs));
            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public Menu getMenu(Integer codigo_m) throws Exception {
        try {
            super.setPreparedStatement(SQLMenu.getMenu_x_Codigo);
            super.ps.setInt(1, codigo_m);
            super.rs = ps.executeQuery();

            while (super.rs.next()) {
                return this.getMenu(rs);
            }
            return null;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    private Menu getMenu(ResultSet rs) throws Exception {
        try {
            Menu m = new Menu();
            m.setCodigo_m(rs.getInt("codigo_m"));
            m.setCodigo_papa_m(rs.getInt("codigo_papa_m"));
            m.setNombre_m(rs.getString("nombre_m"));
            m.setDescripcion_m(rs.getString("descripcion_m"));
            m.setUrl_m(rs.getString("url_m"));
            m.setNivel_m(rs.getInt("nivel_m"));
            m.setOrdenar_m(rs.getInt("ordenar_m"));

            m.setEstado_m(rs.getString("estado_m"));
            m.setEstado_filtro_m(v.getEstado(rs.getString("estado_m")));

            /*TIPO MENU*/
            m.setCodigo_tm(rs.getInt("codigo_tm"));
            m.setNombre_tm(rs.getString("nombre_tm"));
            return m;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<TipoMenu> getTipoMenusActivos() throws Exception {
        try {
            TipoMenuControlador tm = new TipoMenuControlador();
            return tm.getTipoMenusActivos();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
}
